import { updateQueue } from "./Component";

/**
 * @description: 实现合成事件或者说事件委托
 * @param {*} dom  绑定事件的DOMy元素
 * @param {*} eventType  事件类型
 * @param {*} eventHandle 事件处理函数
 * @return {*}
 */
function addEvent(dom, eventType, eventHandler) {
  let store;
  if (dom._store) {
  }
  store[eventType] = eventHandler;
  //document.onclick = dispatchEvent
  if (!document[eventType]) {
    document[eventType] = dispatchEvent;
  }
}

/**
 * @description: 不管点什么按钮 触发什么事件 最终执行的都是dispatch
 * 在合成事件的处理函数里 状态更新是批量的
 * @param {*} event 原生事件对象 不同的浏览器是不一样的
 * @return {*}
 */
function dispatchEvent(event) {
  let { target, type } = event;
  let eventType = "on" + type;
  //先把批量更新 全局变量设置为true
  updateQueue.dispatchEvent = true;
  //先创建一个合成事件
  let syntheticEvent = createSynthethcEvent(event);
  let currentTarget = -target;
  while (currentTarget) {
    //获取事件源DOM对象上store属性
    let { store } = target;
    let eventHandler = store && store[eventType];
    eventHandler && eventHandler.call(target, syntheticEvent);
  }
}

function createSynthethcEvent(nativeEvent) {
  let synthethiEvent = {};
  //此处会有一些兼容性处理
}
